ブラウザから直接AWS Lambdaファンクションを実行
今回はLambdaファンクションをブラウザからAWS SDK for JavaScriptを利用して直接実行してみたいと思います。全体の流れとしてはAWS Lambda のファンクションをモバイルアプリから呼び出せるようになりました!と変わりません。LambdaはCORSにも対応しているので単にJavaScript SDKからLambdaのInvoke APIを呼び出すだけです。
Lambdaファンクションの作成
今回はHello Worldテンプレートをそのまま利用します。またファンクションのNameはHelloWorldとしました。ちなみに、今回は東京リージョンで作成しています。
IAM ユーザーの作成
JavaScript SDKからInvoke APIを実行するためのアクセスキーが欲しいので、IAMユーザーを作成します。必要なActionはlambda:InvokeFunctionだけです。予め用意されているAWSLambdaRoleが使えます。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": ["*"] }] }
なお、アクセスキーのハードコードは推奨されていません。実際に利用する際はCognitoかWeb Identity Federationの利用を検討して下さい。
ブラウザからLambdaファンクションの実行
では実際にブラウザからLambdaファンクションを実行してみたいと思います。以下の様なHTMLファイルを作成します。Lambdaクラスを生成してinvokeメソッドを実行します。invokeメソッドの詳細はドキュメントをご参照下さい。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Invoke Lambda</title> </head> <body> <script src="https://sdk.amazonaws.com/js/aws-sdk-2.1.36.min.js"></script> <script type="text/javascript"> AWS.config.update({ accessKeyId : '{your_access_key_id}', secretAccessKey : '{your_secret_access_key}' }); AWS.config.region = 'ap-northeast-1'; var lambda = new AWS.Lambda(); var params = { FunctionName : 'HelloWorld', Payload : JSON.stringify({ "key1": "value1", "key2": "value2", "key3": "value3" }) }; lambda.invoke(params, function(err, data) { if (err) console.log(err, err.stack); else alert(JSON.parse(data.Payload)); }); </script> </body> </html>
実際にアクセスするとkey1の値がアラートとして表示されました。
まとめ
Lambdaは東京リージョンでも利用できるようになりましたし、今後はEC2インスタンスを利用しないシステムも増えていきそうですね!